<?php

/**
 * This is the model class for table "facturacion.prestacion_brindada".
 *
 * The followings are the available columns in table 'facturacion.prestacion_brindada':
 * @property integer $id
 * @property integer $id_prestaciontomada
 * @property integer $id_beneficiario
 * @property string $fecha_prestacion
 * @property string $fecha_carga
 * @property string $monto
 * @property string $debitado
 * @property string $motivo_debito
 * @property string $monto_debitado
 * @property string $comentarios
 * @property integer $id_factura
 * @property integer $id_efector
 *
 * The followings are the available model relations:
 * @property PrestacionesPermitidas $idPrestaciontomada
 * @property Efectores $idEfector
 * @property Factura $idFactura
 * @property Sumar $idBeneficiario
 */
class PrestacionBrindada extends CActiveRecord
{
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'facturacion.prestacion_brindada';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('id_prestaciontomada, id_beneficiario, fecha_prestacion, fecha_carga, monto, id_efector', 'required'),
			array('id_prestaciontomada, id_beneficiario, id_factura, id_efector', 'numerical', 'integerOnly'=>true),
			array('monto, monto_debitado', 'length', 'max'=>12),
			array('debitado', 'length', 'max'=>1),
			array('motivo_debito', 'length', 'max'=>150),
			array('comentarios', 'length', 'max'=>300),
                    
                        array('monto, monto_debitado', 'rulesControlDebitos', 'on'=>'debitando'),
                        array('monto, monto_debitado', 'rulesControlPrecioDebitos', 'on'=>'debitando'),
                    
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('id, id_prestaciontomada, id_beneficiario, fecha_prestacion, fecha_carga, monto, debitado, motivo_debito, monto_debitado, comentarios, id_factura, id_efector', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'MiPrestacionTomada' => array(self::BELONGS_TO, 'PrestacionesPermitidas', 'id_prestaciontomada'),
			'MiEfector' => array(self::BELONGS_TO, 'Efectores', 'id_efector'),
			'MiFactura' => array(self::BELONGS_TO, 'Factura', 'id_factura'),
			'MiBeneficiario' => array(self::BELONGS_TO, 'Sumar', 'id_beneficiario'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'id_prestaciontomada' => 'Id Prestaciontomada',
			'id_beneficiario' => 'Id Beneficiario',
			'fecha_prestacion' => 'Fecha Prestacion',
			'fecha_carga' => 'Fecha Carga',
			'monto' => 'Monto',
			'debitado' => 'Debitado',
			'motivo_debito' => 'Motivo Debito',
			'monto_debitado' => 'Monto Debitado',
			'comentarios' => 'Comentarios',
			'id_factura' => 'Id Factura',
			'id_efector' => 'Id Efector',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function search()
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id',$this->id);
		$criteria->compare('id_prestaciontomada',$this->id_prestaciontomada);
		$criteria->compare('id_beneficiario',$this->id_beneficiario);
		$criteria->compare('fecha_prestacion',$this->fecha_prestacion,true);
		$criteria->compare('fecha_carga',$this->fecha_carga,true);
		$criteria->compare('monto',$this->monto,true);
		$criteria->compare('debitado',$this->debitado,true);
		$criteria->compare('motivo_debito',$this->motivo_debito,true);
		$criteria->compare('monto_debitado',$this->monto_debitado,true);
		$criteria->compare('comentarios',$this->comentarios,true);
		$criteria->compare('id_factura',$this->id_factura);
		$criteria->compare('id_efector',$this->id_efector);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}

	/**
	 * Returns the static model of the specified AR class.
	 * Please note that you should have this exact method in all your CActiveRecord descendants!
	 * @param string $className active record class name.
	 * @return PrestacionBrindada the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
        
        /*************************************************************/
        /*************************************************************/
        /*************************************************************/
        
        protected function beforeSave(){
            $this->fecha_prestacion=date('Y-m-d',strtotime($this->fecha_prestacion));
            $this->fecha_carga=date('Y-m-d',strtotime($this->fecha_carga));
            parent::beforeSave();
            return true;
        }
            
        protected function afterFind(){            
            $this->fecha_prestacion=date('d-m-Y',strtotime($this->fecha_prestacion));
            $this->fecha_carga=date('d-m-Y',strtotime($this->fecha_carga));            
            parent::afterFind();
            return TRUE;
        }
        
        
        public function rulesControlDebitos(){
            $reglas = "/^[0-9]{1,10}(\.[0-9]{1,2}){0,1}$/";  
            if ((empty($this->monto_debitado)) || (!(preg_match($reglas, $this->monto_debitado))) )  
                $this->addError('monto_debitado','Error!!. Ingrese el motivo del debito'); 
            if (empty($this->motivo_debito))
                $this->addError('motivo_debito','Error!!. Ingrese el motivo del debito'); 
        }
        
        public function rulesControlPrecioDebitos(){
            $monto = $this->monto;
            $monto_debitado = $this->monto_debitado;
            if ($monto<$monto_debitado )  
                $this->addError('monto_debitado','Error!!. El monto debitado debe ser menor a: '.$monto); 
        }
        
        /*********************************************************************/
         public function PrestacionesTomadasMes($fecha,$idBeneficiario, $idPres){
              list($diaPres,$mesPres,$anioPres) = explode("-",$fecha);  
              
              $rangoInicio = $anioPres.'-'.$mesPres.'-01';
              $ultimoDia = $this->getUltimoDiaMes($anioPres,$mesPres); 
              $rangoFin = $anioPres.'-'.$mesPres.'-'.$ultimoDia;   
              
              $criteria = new CDbCriteria();
              $criteria->condition = "(t.id_beneficiario = :benef) and  (id_prestaciontomada = :pres) and  ((t.fecha_prestacion >= :inicio) and (t.fecha_prestacion <= :fin)) ";
              $criteria->params = array(':benef'=> $idBeneficiario, ':pres'=>$idPres, ':inicio'=> $rangoInicio, ':fin'=> $rangoFin);
              $data = PrestacionBrindada::model()->findAll($criteria);
              $cantPrestacionMes = count($data);
              return $cantPrestacionMes;
         }
         
        public function PrestacionesTomadasDia($fecha,$idBeneficiario, $idPres){
              list($diaPres,$mesPres,$anioPres) = explode("-",$fecha);
              $fecha = $anioPres.'-'.$mesPres.'-'.$diaPres;
              $criteria = new CDbCriteria();
              $criteria->condition = "(t.id_beneficiario = :benef) and  (id_prestaciontomada = :pres) and  (t.fecha_prestacion = :inicio)";
              $criteria->params = array(':benef'=> $idBeneficiario, ':pres'=>$idPres, ':inicio'=> $fecha);
              $data = PrestacionBrindada::model()->findAll($criteria);
              $cantPrestacionDia = count($data);
              return $cantPrestacionDia;
         }
         
         public function PrestacionesTomadasAnio($fecha,$idBeneficiario,$idPres){
              list($diaPres,$mesPres,$anioPres) = explode("-",$fecha);
    
              $rangoInicioAnio = $anioPres.'-01-01';
              $rangoFinAnio = $anioPres.'-12-31';
              
              $criteria = new CDbCriteria();
              $criteria->condition = "(t.id_beneficiario = :benef) and  (id_prestaciontomada = :pres) and ((t.fecha_prestacion >= :inicio) and (t.fecha_prestacion <= :fin)) ";
              $criteria->params = array(':benef'=> $idBeneficiario,  ':pres'=>$idPres, ':inicio'=> $rangoInicioAnio, ':fin'=> $rangoFinAnio);
              $data = PrestacionBrindada::model()->findAll($criteria);
              $cantPrestacionAnio = count($data);
              return $cantPrestacionAnio;
         }
        
        
        
        /*********************************************************************/
        public function getMiPrestacionTomada(){
           return $this->MiPrestacionTomada->MiPrestacion->codigo.'-'.$this->MiPrestacionTomada->MiPrestacion->descripcion;
        }
        
        public function getMiBeneficiario(){
           return $this->miBeneficiario->apellido ." ".$this->miBeneficiario->nombre;
        }
        
        public function getMiFacturaLink(){
           return "asdasd " . " " . CHtml::link(CHtml::image(Yii::app()->request->baseUrl . '/images/pdf_logo.gif'),Yii::app()->createUrl('beneficiarios/beneficiarioInscripto',array('id'=>$data->id)));
        }
        
       public function getUltimoDiaMes($elAnio,$elMes) {
          $elAnio = (int) $elAnio;
          $elMes = (int) $elMes;
             
          if (($elMes==2)) 
            return 28;
          else
             if ( ($elMes==1) || ($elMes==3) || ($elMes==5) || ($elMes==7) || ($elMes==8) || ($elMes==10)
                      || ($elMes==12))
                 return 31;
             else
                 return 30;
       }       
       
       public function getTipoPrestacion(){
           return $this->prestacionTomada->miPrestacion->CategoriaPrestacion->Nomenclador->MiTipoNomenclador->descripcion;
       }
        
       public function getCssClass($data){
        if (($data->debitado==0) || ($data->debitado=='0'))
            return "prestacionDebitada";
        else
            return "prestacionAceptada";
       }       
        
       public function getPrestacionRealizada(){          
          return $this->MiPrestacionTomada->MiPrestacion->codigo.' -  '.$this->MiPrestacionTomada->MiPrestacion->descripcion;
       }
        
       public function getPrestacionRealizadaPatologiaComun(){
           return $this->MiPrestacionTomada->MiPatologia->codigo.'-'.$this->MiPrestacionTomada->MiPatologia->descripcion;
       }
            
        
}
